﻿using System.Diagnostics.Contracts;
using System.Linq.Expressions;

namespace System.Reactive.Linq
{
	public static partial class Qbservable
	{
		public static IQbservable<TResult> Join<TLeft, TRight, TLeftDuration, TRightDuration, TResult>(this IQbservable<TLeft> left, IObservable<TRight> right, Expression<Func<TLeft, IObservable<TLeftDuration>>> leftDurationSelector, Expression<Func<TRight, IObservable<TRightDuration>>> rightDurationSelector, Expression<Func<TLeft, TRight, TResult>> resultSelector)
		{
			Contract.Requires(left != null, null, "left != null");
			Contract.Requires(right != null, null, "right != null");
			Contract.Requires(leftDurationSelector != null, null, "leftDurationSelector != null");
			Contract.Requires(rightDurationSelector != null, null, "rightDurationSelector != null");
			Contract.Requires(resultSelector != null, null, "resultSelector != null");
			Contract.Ensures(Contract.Result<IQbservable<TResult>>() != null, null, "Contract.Result<IQbservable<TResult>>() != null");
			return null;
		}
	}
}